{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 一.概率与图的关系\n",
    "概率图模型（PGM）其实可以拆开看做“概率”+“图”，它是以图的方式呈现随机变量的联合概率分布，这一节主要主要介绍有向无环图，即贝叶斯网，假如我们有如下的一个联合概率分布，它可以按照链式规则展开如下：   \n",
    "\n",
    "\n",
    "$$\n",
    "p(a,b,c)=p(a)\\cdot p(b\\mid a)\\cdot p(c\\mid a,b)\n",
    "$$  \n",
    "\n",
    "那么它可以用有向图表示为：   \n",
    "![avatar](./source/12_概率图初探demo.png)\n",
    "\n",
    "但是，很多情况下变量之间是具有条件独立性的，即某些变量之间并不会互相影响，比如对上面的模型做一个马尔科夫假设，让每一个随机变量只与它的前一个随机变量有关：   \n",
    "\n",
    "$$\n",
    "p(a,b,c)=p(a)\\cdot p(b\\mid a)\\cdot p(c\\mid b)\n",
    "$$  \n",
    "\n",
    "那么，此时的概率图可以表示为：  \n",
    "\n",
    "![avatar](./source/12_概率图初探demo2.png) \n",
    "\n",
    "#### 小结一下\n",
    "\n",
    "通过概率图的方式，我们可以非常简单直接的表示概率的分布关系，反过来，我们也可以通过图很容易的推导出它的联合概率分布公式：   \n",
    "\n",
    "$$\n",
    "p(x)=\\prod_ip(x_i\\mid x_{Pa(i)})\n",
    "$$  \n",
    "\n",
    "这里$Pa(i)$表示第$i$个节点的前驱节点，比如上面$b$的前驱节点即为： $Pa(b)=a$   "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 案列演示\n",
    "再比如如下的概率图：   \n",
    "\n",
    "![avatar](./source/12_概率图初探demo3.png)\n",
    "\n",
    "可以很快写出它的联合概率分布：   \n",
    "\n",
    "$$\n",
    "p(a,b,c,d,e)=p(a)\\cdot p(b\\mid a)\\cdot p(c\\mid a,b)\\cdot p(d\\mid b)\\cdot p(e\\mid c)\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 二.条件独立性的好处\n",
    "上面提到了条件独立性，接下来聊一下它，假如：   \n",
    "\n",
    "$$\n",
    "p(c\\mid b)=p(c\\mid a,b)\n",
    "$$  \n",
    "\n",
    "可以发现不管$a$存在与否，对条件概率$p(c\\mid b)$都没有影响，那么就称在$b$被观测的条件下，$a$与$c$条件独立，之所以可以这样做，因为随机变量大多满足这样的客观规律，比如你当前的心情可能只与最近一个小时内所遇到的事情相关，难道你还会被一星期前某个瞬间的心情所影响吗？    \n",
    "\n",
    "\n",
    "对随机变量做条件独立假设还有一个计算上的好处：**极大地降低了参数量**\n",
    "\n",
    "比如对$p(a,b,c)$如果每个随机变量都有10种取值情况，那么$p(a,b,c)$的参数量有$10^3$，但如果对其做条件独立性假设：$p(a,b,c)=p(a)\\cdot p(b\\mid a)\\cdot p(c\\mid b)$后参数量将只有：10($p(a)$)+100($p(b\\mid a)$)+100($p(c\\mid b)$)=210，对于更加高维的随机变量，将会极大地降低参数量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
